package xing.design.pattern.behavioral.Memento.sample2;

/**
 * 对本接口而言，显然适用性很广泛，因为不需要参数。只要需要备份的，谁都可以用。
 * <p>
 * 因此，对 Originator 需要做备份者而言，也可以有一个抽象，只有 save() 方法，或 createSnapshot() 方法 ，与此对应。
 *
 * @author xing
 * @date 2023/2/10 12:58:14
 */
public interface Memento {
    /**
     * 对适用性而言，不同 originator ，其信息也不同，不能很简单的实现去提供，
     * <p>
     * 还是备份本身而言，我们无需对外暴露备份中的信息。
     * <p>
     * 而 Memento 不作为内部类，也无法被 Originator 得到其信息（没对应方法）。
     * <p>
     * 因此，restore() 也无法放在 Originator 内部。所以放在这里。
     */
    void restore();

    /**
     * 通过 {@link BaseMemento } 的使用来说，可以看到，作为参数传入，并不好。
     * <p>
     * 本来 Memento 的构造，是在 BaseOriginator 中，并将 BaseOriginator 对象 (this) 传入，使其持有
     * <p>
     * 而如果作为参数，就无法保证传入的 Originator 有效，当 Originator 实现不止一个，
     * <p>
     * 就会大大增加复杂情况。无论是人自身对类型的判断，还是代码对需求类型的判断，都会增加大量负担。
     */
    @Deprecated
    boolean restore(Originator originator);
}
